﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace ScLoad
{

    sealed public partial class ScLoadForm : Form
    {
        string url = "";
        int proc_status=0; //статус процесса создания и загрузки снимка(1 = активный, 0 = не активный )

        public ScLoadForm()
        {
            InitializeComponent();
            /////////////////////////////////////
            this.ShowInTaskbar = false;
            tray.Visible = true;
            CreateDirectory();
        }

        //сработал хоткей PrtScr
        public void Handle1Hotkey()
        {
            if (proc_status == 0)
            {
                proc_status = 1;
                DateTime dt = DateTime.Now;
                Save save = new Save(dt);
                byte[] bitmapData=ScShot.MakeScreenShot();
                CreateDirectory();
                save.save_screen(bitmapData); //скриншот на диск
                load_screen(bitmapData); //скриншот на сервер
                proc_status = 0;
            }
        }

        //сработал хоткей alt+PrtScr
        public void Handle2Hotkey()
        {
            if (proc_status == 0)
            {
                proc_status = 1;
                DateTime dt = DateTime.Now;
                Save save = new Save(dt);
                byte[] bitmapData = ScShot.MakeWindowShot();
                CreateDirectory();
                save.save_screen(bitmapData); //скриншот на диск
                load_screen(bitmapData); //скриншот на сервер
                proc_status = 0;
            }
        }

        private void tray_DoubleClick(object sender, EventArgs e)
        {
            Handle1Hotkey();
        }

        private void take_link_Click(object sender, EventArgs e)
        {
            Clipboard.SetText(url);
        }

        private void open_folder_Click(object sender, EventArgs e)
        {
            CreateDirectory();
            OpenLink(Application.StartupPath + @"\Screenshots");
        }

        private void exit_Click(object sender, EventArgs e)
        {
            Environment.Exit(0);
        }

#region загружаем снимок на сервер

        private void load_screen(byte[] data)
        {
            tray.ShowBalloonTip(2000, "ScLoad", "Загрузка на хостинг...", ToolTipIcon.Info);
            url = Network.PostToImgur(data);
            if (url[0]!='!')
            {
                take_link.Enabled = true;
                tray.ShowBalloonTip(2000, "ScLoad", "Заргузка удачно завершена!", ToolTipIcon.Info);
                OpenLink(url);
            }
            else
            {
                tray.ShowBalloonTip(2000, "ScLoad", "Произошла ошибка при загрузке!\n\n" + url, ToolTipIcon.Error);
            }
        }
#endregion

#region автозагрузка и все что с ней связано

        private void tray_menu_Opening(object sender, CancelEventArgs e)
        {
            if (!AutoLaunch.IsAutoLaunchEnabled)
            {
                auto_launch.Image = Properties.Resources.no;
                auto_launch.ToolTipText = "Автозапуск отключен";
                launch_on.Enabled = true;
            }
            else
            {
                auto_launch.ToolTipText = "Приложение запускается автоматически";
                auto_launch.Image = Properties.Resources.ok;
                launch_off.Enabled = true;
            }
        }

        private void launch_on_Click(object sender, EventArgs e)
        {
            AutoLaunch.EnableAutoStart();
            launch_on.Enabled = false;
        }

        private void launch_off_Click(object sender, EventArgs e)
        {
            AutoLaunch.DisableAutoLaunch();
            launch_off.Enabled = false;
        }
#endregion

        private void CreateDirectory()
        {
            if (!Directory.Exists(Application.StartupPath+@"\Screenshots"))
            {
                Directory.CreateDirectory(Application.StartupPath+@"\Screenshots");
            }
        }

        //Copied this "as-is" from Microsoft recommendation
        private void OpenLink(string sUrl)
        {
            try
            {
                System.Diagnostics.Process.Start(sUrl);
            }
            catch
                (
                 System.ComponentModel.Win32Exception noBrowser)
            {
                if (noBrowser.ErrorCode == -2147467259)
                    MessageBox.Show(noBrowser.Message);
            }
            catch (System.Exception other)
            {
                MessageBox.Show(other.Message);
            }
        }
    }
}
